<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>对象优化</title>
  <script>
    // 1. 对象的扩展运算符
    function fun1(){
      // 1.1 声明一个对象
      let person = {
        "name": "小明",
        "age": 22,
        "sex": '男',
        "addr": '北京'
      }
      // 1.2 得到对象的key的集合
      const keys = Object.keys(person)
      console.log("keys:",keys)
      // 1.3 得到对象的value的集合
      const values = Object.values(person)
      console.log("values:",values)
      // 1.4 得到对象的条目集合
      const entries = Object.entries(person)
      console.log("entries:",entries)
      // 1.5 使用assign进行对象的复制拷贝 ,复制后的对象与原来的对象是分隔开的，进行了深拷贝！
      let target = {a:1}
      let source1 = {b:2}
      let source2 = {c:3}
      Object.assign(target,source1,source2)
      console.log(target)
      target['b'] = 10
      console.log("修改后：",target)
      console.log("修改后：",source1)
    }
    // fun1()
    // 2. 对象的函数属性简写：
    function fun2(){
      let person = {
        "name": "张三",
        "age": 20,
        sayHello(){     // 函数属性简化写法：
          console.log("姓名：",person.name,",年龄：",person.age)
        }
      }
      person.sayHello()
    }
    // fun2()

    // 3. 对象拓展运算符
    function fun3(){
      let p1 = {"name":"张三","age":20}
      // let p2 = {...p1}                     // 深拷贝方法一，相当于将p1复制一份给p2对象
      let p2 = JSON.parse(JSON.stringify(p1)) // 深拷贝方法二，老式做法
      p2.name = '李四'
      console.log("p2：",p2)
      console.log("p1：",p1)
    }
    // fun3()

    // 4. map: 对数组中的每个元素进行操作
    function fun4(){
      let arr = [1,2,3,4,5]
      let newArr = arr.map(a => a * 2)
      console.log(newArr)
    }
    // fun4()

    // 5. reduce: 对数组中每个元素进行累加和累积
    function fun5(){
      let arr = [1,2,3,4,5]
      let sum = arr.reduce((a,b) => a + b,0)    // a: 代表上次的累加的值，b：代表本次的值 0：代表初始值
      console.log("sum = ",sum)
    }
    fun5()
  </script>
</head>
<body>

</body>
</html>
